package com.qf.base.exceptionhandler;

import com.qf.common.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;


@Slf4j  //将错误日志输出到文件
@ControllerAdvice       /*全局异常处理，这其实也是一个controller，用于做异常处理的controller*/
public class GlobalExceptionHandler {


    @ExceptionHandler(Exception.class)     /*指定出现什么异常执行这个方法*/
    @ResponseBody   /*为了返回数据*/
    public R errorException(Exception e) {

        e.printStackTrace();

        return R.error().message("全局异常处理。。。。。。。。。");
    }


    /*特定异常处理，这里是方法重载，执行机制：先找具体的异常处理，如果没有就找全局异常*/
    @ExceptionHandler(ArithmeticException.class)     /*指定出现什么异常执行这个方法*/
    @ResponseBody   /*为了返回数据*/
    public R errorException(ArithmeticException e) {

        e.printStackTrace();

        return R.error().message("java.lang.ArithmeticException: / by zero");
    }


    /*自定义异常类：自定义异常系统不能识别，需要手动抛出*/
    @ExceptionHandler(EduException.class)     /*指定出现什么异常执行这个方法*/
    @ResponseBody   /*为了返回数据*/
    public R errorException(EduException e) {

        /*把异常信息写到日志文件中*/
        //log.error(e.getMessage());    //方式1
        log.error(ExceptionUtil.getMessage(e));     //方式2

        e.printStackTrace();

        return R.error().code(e.getCode()).message(e.getMsg()); //用自定义的异常类的状态码和错误信息
    }



}
